#include <stdio.h>

//有符号数、无符号数整型的不同类型演示以及溢出演示
int main() {
    /**有符号数*/
    int i = 10;
    short a = 32767;
    short b = 0;
    long c;//32位的程序是4个字节，64位的是8个字节
    b = a + 1;//发生了溢出，解决溢出的办法是用更大的空间来存
    printf("b = %2d\n", b);//b并不是32767
    i = a + 1;
    printf("i = %2d\n", i);
    /**无符号数*/
    unsigned int m = 3;
    unsigned short n = 0x8056;//无符号类型，最高位不认为是符号位
    unsigned long k = 5;
    b = 0x8056;
    //b是有符号数 写成补码是 1000 0000 0101 0110
             //取反原码则是 0111 1111 1010 1001
                            //=>-32768
    //n是无符号数，直接计算 1000 0000 0101 0110
    //=>2^15+64+16+4+2=32854
    printf("--------------\n");
    printf("b = %2d\n", b);//b是有符号类型，所以输出为负值
    printf("n = %2u\n", n);//无符号类型要用%u，用%d是不规范的
    return 0;
}
